#ifndef COM_DEFINE_H
#define COM_DEFINE_H

/////////////////////////////////////////////////////////////////////////////
// 更新记录
// 2018-12-29 - V3.0.0 16 组接入
// 2019-04-17 - V3.1.0 增加充满放空释放条件（单体电压）
// 2019-05-09 - V3.2.0 增加均衡使能标志
// 2019-06-12 - V3.3.0 增加BA的DIDO,充放电次数,Ah
// 2019-09-16 - V3.4.0 增加BA IO 采集可配置、对BCMU、BMU的升级
// 2019-09-16 - V3.4.1 增加支路状态的独立计算
// 2019-09-16 - V3.4.2 增加禁充 禁放、状态释放电量、单体温度分禁充禁放,运行状态原因
// 2019-09-16 - V3.4.3 增加BC断开接触器记录
// 2020-02-26 - V3.4.4 增加 Web 升级 和 监控
// 2020-03-07 - V3.4.5 增加 故障灯 的独立控制(常开)
// 2020-03-11 - V3.4.6 增加 熔丝 汇流开关 配置
// 2020-04-01 - V3.4.6 增加命令的宏定义(版本保持)
// 2020-04-15 - V3.4.7 增加 总正、总负、预充接触器粘连告警(30秒)、完善 汇流开关 策略
// 2020-05-26 - V3.4.8 禁充禁放释放按累计电量计算、 降功率值恢复需要释放一定的电量
// 2020-06-04 - V3.4.9 并联汇入时,充满发给每台BC
// 2020-07-17 - V3.4.10 动力线温度处理、直流侧汇入方式:多组汇入、运行模式、降功率末端条件可配、主界面绝缘显示、汇流开关控制、增加电池堆功率、电池组功率
// 2020-11-21 - V3.4.11 计算Ah（保存数据库、modbus点表保持不变）、BA 重启主动断开接触器,检查接触器粘连情况、BC 重启日志记录、运行灯、SOC校准系数
// 2020-12-14 - V3.4.12 增加紧急停机
// 2021-01-25 - V3.4.13 增加预充时间（可配、默认10秒）
// 2021-03-15 - V3.4.14 增加应急模式、扩展干接点、霍尔异常、环境温度
// 2021-03-22 - V3.4.15 增加调试模式、电压过滤、扩展IO设备通讯故障
// 2021-05-09 - V3.4.16 增加BC对时功能(每小时对时一次)
// 2021-05-09 - V3.4.17 增加风机故障状态、BMU通讯故障位置、熔丝故障测点
// 2022-03-15 - V3.5.0  单体增加到 600
// 2022-03-22 - V3.5.1  增加接触器无法闭合故障、增加转发模式、 累加电量需要使用double
// 2022-03-22 - V3.5.2  增加单体数据显示策略 CellDataStrategy=0 在misce.ini中
// 2022-07-15 - V3.6.0  增加支路动态分配、 RTDB版本核验、 增加其他程序版本界面显示、增加预充失败告警、增加组压采集差告警、调整测点表
// 2022-07-15 - V3.6.1  广播包中增加BC、BMU版本（0为无效版本）读取BC、BMU版本信息 增加模组电压以及告警处理
// 2022-09-17 - V3.6.2  修改风机启停温度设置
// 2022-12-13 - V3.7.0  界面整理、消防水浸汇总、EMS及PCS通讯故障判断、空调温湿度区域
// 2023-05-31 - V3.8.0  BMS新国标调整
// 2023-10-26 - V3.8.1  增加动环数据结构 胡来顺
// 2025-03-06 - V3.8.2  和BA10统一版本  胡来顺
// 2025-06-02 - V3.8.3  每个动环有100个整型和100个浮点型的下设值  胡来顺

#include <QObject>
#include <QDateTime>

/////////////////////////////////////////////////////////////////////////////
//版本信息
#define BAMS_VERSION_MAJOR                                3
#define BAMS_VERSION_MINOR                   	          8
#define BAMS_VERSION_REVISION                             3
#define BAMS_VERSION_TEXT                                 "3.8.3"

// define
#define MESSAGE_TIP_SECONDS                               3        // 消息提示 3 秒
#define DATA_BUFFER_LENGHT                                512      // Modbus RTU
#define SNED_BUFFER_LENGHT                                1024
#define RECE_BUFFER_LENGHT                                1024
#define MAX_BATT_NUM                                      600
#define BANK_ALARM_MAX_NUM                                3630 + 70 + 200  // (30 + 600 * 6) + 10 空余 + 200(温差、压差、动力线) + 50箱电压
#define ALARM_LAST_NO                                     999      // 告警最后一条
#define ALARM_BANK_NO                                     999      // 组端编号
#define ALARM_INVALID_VALUE                               999      // 无效值
#define MAX_CELL_NUM_IN_BMU                               200      // 一个BMU箱内的最大单体数量
#define MAX_TEMP_NUM_IN_BMU                               200      // 一个BMU箱内的最大温度数量
#define MAX_PACK_NUM                                      50       // 最大电池PACK数
#define MAX_PACK_PWR_LN_TEMP_NUM                          100      // 最大电池PACK动力线温度数
#define MAX_STACK_NUM                                     1       // 最大电池堆数
#define MAX_REG_NUM                                       32       // 最大寄存器数(主机存从机数据)
#define MAX_BANK_NUM                                      16       // 最大电池组数
#define MAX_BMU_NUM                                       40       // 最大BMU数
#define MAX_ALARM_CACHE_NUM                               512      // 最大告警缓存数
#define CAN_MULTI_FRAME_NUM                               100      // 一次最多读100帧
#define MAX_IO_NUM                                        2        // 最大IO数
#define MAX_DI_NUM                                        16       // 最大DI数
#define MAX_DO_NUM                                        16       // 最大DO数
#define MAX_DI_NAME                                       32       // DI名称的最大长度
#define MAX_DO_NAME                                       32       // D0名称的最大长度
#define MAX_AC_NUM                                        32       // 最大空调数
#define MAX_TEMP_HUMI_NUM                                 32       // 最大温湿度数
#define MAX_TH_NUM                                        32       // 最大温湿度数
#define MAX_WATER_NUM                                     32       // 最大水浸数
#define MAX_METER_NUM                                     32       // 电表接入最多台数
#define MAX_DH_NUM                                        32       // 最大除湿数
#define MAX_LC_NUM                                        32       // 最大液冷数
#define MAX_PCS_NUM                                       32       // 最大逆变器数
#define MAX_DCDC_NUM                                      32       // 最大DCDC数
#define MAX_DOOR_NUM                                      32       // 最大门禁数
#define MAX_EC_NUM                                        32       // 最大环控数
#define MAX_FIRE_NUM                                      32       // 最大消防数
#define MAX_PV_NUM                                        32       // 最大光伏数
#define MAX_ES_NUM                                        32       // 最大急停数
#define MAX_UPS_NUM                                       32       // 最大UPS数
#define MAX_GAS_NUM                                       32       // 最大可燃气体数
#define MAX_PILE_NUM                                      32       // 最大充电桩数
#define MAX_LED_NUM                                       32       // 最大LED灯数
#define MAX_FAN_NUM                                       32       // 最大风扇数
#define MAX_STS_NUM                                       32       // 最大STS数
#define MAX_PRESS_NUM                                     32       // 最大压力传感器数
#define MAX_LEVEL_NUM                                     32       // 最大液位传感器数
#define MAX_MPPT_NUM                                      32       // 最大MPPT数
#define MAX_IO_NUM                                        2        // 最大IO设备数
#define MAX_RES1_NUM                                      32       // 预留设备1的最大数

#define MAX_APP_NUM                                       32       // 最大进程APP数
#define MAX_APP_NAME                                      32       // 进程APP名称的最大长度

// Log Type
#define RUN_LOG_ALL                                       0
#define RUN_LOG_OK                                        1
#define RUN_LOG_FAILED                                    2
#define RUN_LOG_RUN                                       3
#define RUN_LOG_STOP                                      4
#define RUN_LOG_MESSAGE_BA                                10
#define RUN_LOG_MESSAGE_DT                                11
#define RUN_LOG_MESSAGE_PCS                               12
#define RUN_LOG_MESSAGE_GPRS                              13
#define RUN_LOG_MESSAGE_CAN                               14
#define RUN_LOG_MESSAGE_NTP                               15
#define RUN_LOG_MESSAGE_CMD                               16
#define RUN_LOG_MESSAGE_FILE                              17

#define RUN_MESSAGE_REPLY_SELECT                          102   // 日志帅选 状态回复

// Message Log 1 - 100
#define MSG_TYPE_LOG_REGISTER                             1   // 日志注册
#define MSG_TYPE_LOG_SELECT                               2   // 日志帅选
#define MSG_TYPE_LOG_SERVER_STAT                          3   // 日志服务统计

#include "ProcessType.h"
// // Process No
// #define PROCESS_ALL                                       0
// #define PROCESS_NO_XNDACSRV                               10
// #define PROCESS_NO_XNTRANSRV                              11
// #define PROCESS_NO_XNDATAPROC                             12
// #define PROCESS_NO_XNLOGSRV                               13
// #define PROCESS_NO_XNVIEW                                 14
// #define PROCESS_NO_XNGUARD                                15
// #define PROCESS_NO_XNUPGRADE                              16
// #define PROCESS_NO_XNLOG                                  17
// #define PROCESS_NO_XNPLAT                                 18
// #define PROCESS_NO_XN104                                  19
// #define PROCESS_NO_XNREQCABISOC                           20
// #define PROCESS_NO_XNGPRSSRV                              21
// #define PROCESS_NO_XNBATEVAL                              22
// #define PROCESS_NO_XN61850                                23
// #define PROCESS_NO_XNDACASS                               24

// #define PROCESS_NO_OTHER                                  99

// System Log Type
#define SYS_LOG_TYPE_RUN                                  1         // 运行日志
#define SYS_LOG_TYPE_OPT                                  2         // 操作日志

#include "AlarmTypeDefine.h"

// 电池组状态    1 - 开路 2 - 待机 3 - 充电  4 - 放电
#define BANK_STATE_OPEN                                    1      // 开路
#define BANK_STATE_STANDBY                                 2      // 待机
#define BANK_STATE_CHARGE                                  3      // 充电
#define BANK_STATE_DISCHARGE                               4      // 放电

// Invalid Value
//堆电压
#define STACK_VOL_SAMPLE_INVALID_VALUE_UP                   2000
#define STACK_VOL_SAMPLE_INVALID_VALUE_DOWN                 -0.00001
//堆电流
#define STACK_CUR_SAMPLE_INVALID_VALUE_UP                   2000
#define STACK_CUR_SAMPLE_INVALID_VALUE_DOWN                 -2000
//簇电压
#define BANK_VOL_SAMPLE_INVALID_VALUE_UP                   2000
#define BANK_VOL_SAMPLE_INVALID_VALUE_DOWN                 -0.00001
#define BANK_CUR_SAMPLE_INVALID_VALUE_UP                   2000
#define BANK_CUR_SAMPLE_INVALID_VALUE_DOWN                 -2000
#define PACK_VOL_SAMPLE_INVALID_VALUE_UP                   1000
#define PACK_VOL_SAMPLE_INVALID_VALUE_DOWN                 -0.00001
#define SGL_VOL_SAMPLE_INVALID_VALUE_UP                    64
#define SGL_VOL_SAMPLE_INVALID_VALUE_DOWN                  -0.00001
#define TMP_SAMPLE_INVALID_VALUE_UP                        141
#define TMP_SAMPLE_INVALID_VALUE_DOWN                     -90
#define SGL_RES_SAMPLE_INVALID_VALUE_UP                    64
#define SGL_RES_SAMPLE_INVALID_VALUE_DOWN                  -0.00001
#define SOC_SAMPLE_INVALID_VALUE_UP                        101
#define SOC_SAMPLE_INVALID_VALUE_DOWN                      -0.00001
#define SOH_SAMPLE_INVALID_VALUE_UP                        101
#define SOH_SAMPLE_INVALID_VALUE_DOWN                      -0.00001
#define BANK_INSULATION_RES_SAMPLE_INVALID_VALUE_UP        9990
#define BANK_INSULATION_RES_SAMPLE_INVALID_VALUE_DOWN      -0.00001

#define SAMPLE_INVALID_VALUE_UP                            990
#define SAMPLE_INVALID_VALUE_DOWN                          -990

// 通用命令流程 xndacsrv 处理结果(< 100)、xnview处理结果(101~200)  通用命令类型 (201 ~ 500)
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_EXEING              0          // 正在执行 - xndacsrv 处理
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_OK                  1          // 成功
#define COMMON_CMD_TYPE_EXE_RESULT_DAC_FAILED              2          // 失败

#define COMMON_CMD_TYPE_EXE_RESULT_VIEW_OK                 101         // 成功 - xnview 处理
#define COMMON_CMD_TYPE_EXE_RESULT_VIEW_FAILED             102         // 失败

#define COMMON_CMD_TYPE_READ_ALARM_PARMA                   201         // 读报警参数
#define COMMON_CMD_TYPE_READ_PROT_PARMA                    202         // 读保护参数
#define COMMON_CMD_TYPE_READ_ALARM_DIFF                    203         // 读报警回差
#define COMMON_CMD_TYPE_READ_PROT_DIFF                     204         // 读保护回差
#define COMMON_CMD_TYPE_READ_PACK_DIFF_PARMA               205         // 读箱压差温差
#define COMMON_CMD_TYPE_WRITE_ALARM_PARMA                  206         // 写报警参数
#define COMMON_CMD_TYPE_WRITE_PROT_PARMA                   207         // 写保护参数
#define COMMON_CMD_TYPE_WRITE_ALARM_DIFF                   208         // 写报警回差
#define COMMON_CMD_TYPE_WRITE_PROT_DIFF                    209         // 写保护回差
#define COMMON_CMD_TYPE_WRITE_PACK_DIFF_PARMA              210         // 写箱压差温差
#define COMMON_CMD_TYPE_READ_WARN_PARMA                    211         // 读预警参数
#define COMMON_CMD_TYPE_READ_WARN_DIFF                     212         // 读预警回差
#define COMMON_CMD_TYPE_WRITE_WARN_PARMA                   213         // 写预警参数
#define COMMON_CMD_TYPE_WRITE_WARN_DIFF                    214         // 写预警回差
#define COMMON_CMD_TYPE_READ_BCMU_PARAM1                   215         // 读BCMU参数1
#define COMMON_CMD_TYPE_READ_BMU_PARAM                     216         // 读BMU参数
#define COMMON_CMD_TYPE_WRITE_BCMU_PARAM1                  217         // 写BCMU参数1
#define COMMON_CMD_TYPE_WRITE_BMU_PARAM                    218         // 写BMU参数
#define COMMON_CMD_TYPE_ALLO_BMU_ADDR                      219         // 分配BMU地址
#define COMMON_CMD_TYPE_WRITE_PARAM_TO_BMU                 220         // 写参数到BMU

#define COMMON_CMD_EXE_NUM                                 3          // 命令执行次数

// 预充控制
#define PRE_CHG_CTRL_STATE_UNKOWN                          0           // 未知
#define PRE_CHG_CTRL_STATE_POS_CLOSE                       1           // 总正闭合
#define PRE_CHG_CTRL_STATE_POS_BREAK                       2           // 总正断开
#define PRE_CHG_CTRL_STATE_NEG_CLOSE                       3           // 总负闭合
#define PRE_CHG_CTRL_STATE_NEG_BREAK                       4           // 总负断开
#define PRE_CHG_CTRL_STATE_PRE_CHG_CLOSE                   5           // 预充电路闭合
#define PRE_CHG_CTRL_STATE_PRE_CHG_BREAK                   6           // 预充电路断开
#define PRE_CHG_CTRL_STATE_POS_CLOSE_CHECK                 7           // 总正闭合检查

#define PRE_CHG_CTRL_STATE_BREAK                           9           // 故障状态
#define PRE_CHG_CTRL_STATE_FULFIL                          10          // 预充电路完成

//获取数组数量
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))

#endif //COM_DEFINE_H
